﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SanFranciscoModel.Curso;
using SanFranciscoModel.Alumno;
using SanFranciscoModel.Docente;
using SanFranciscoModel.Maestros;

namespace SanFrancisco
{
    public partial class AltaAsistenciaAlumno : Form
    {
        int _idCurso;
        DateTime _Fecha;

        public AltaAsistenciaAlumno()
        {
            InitializeComponent();
        }

        public AltaAsistenciaAlumno(int idCurso)
        {
            _idCurso = idCurso;
            InitializeComponent();
        }

        private void AltaAsistenciaAlumno_Load(object sender, EventArgs e)
        {
            CargarCursos();
            CargarFechaAsistencias();
            GenerarComponentres();
        }

        private void CargarFechaAsistencias()
        {
            AlumnoManager AlumnoManager = new SanFranciscoModel.Alumno.AlumnoManager();
            DateTime proximaFecha = AlumnoManager.getProximaFechaAsistenciaCargar((int)cmbCurso.SelectedValue);
            string dia = string.Empty;
            string mes = string.Empty;

            if (DateTime.Now.Day.ToString().Count() == 1)
            {
                dia = "0" + DateTime.Now.Day.ToString();
            }
            else
            {
                dia = DateTime.Now.Day.ToString();
            }

            if (DateTime.Now.Month.ToString().Count() == 1)
            {
                mes = "0" + DateTime.Now.Month.ToString();
            }
            else
            {
                mes = DateTime.Now.Month.ToString();
            }

            string fecha = DateTime.Now.Year.ToString() + "-" + mes + "-" + dia;
            DateTime fechaActual = DateTime.ParseExact(fecha, @"yyyy-MM-dd", null);

            if (proximaFecha < fechaActual)
            {
                MessageBox.Show("Para cargar las asistencias primero debe cargar las asistencias de los dias anteriores. \n El programa asignara automaticamente la ultima fecha sin cargar (" + proximaFecha.ToShortDateString() + ").");

                dpFecha.Enabled = false;
                dpFecha.Value = proximaFecha;
                _Fecha = proximaFecha;
            }
            else
            {
                if (proximaFecha > fechaActual)
                {
                    MessageBox.Show("La asistencia para el dia " + DateTime.Now.ToShortDateString() + " ya fue cargada. \n Por favor seleccione otro curso!");
                    dpFecha.Enabled = false;
                    dpFecha.Value = DateTime.Now;
                    dpFecha.CalendarForeColor = Color.Red;
                }
               
            }
            if (proximaFecha == fechaActual)
            {
                dpFecha.Enabled = false;
                _Fecha = proximaFecha;
            }
        }

        private void GenerarComponentres()
        {
            int contador = 20;
            int selector = 0;
            AlumnoManager AlumnoManager = new AlumnoManager();
            List<Alumno> ListAlumno = AlumnoManager.getAlumnosIngresoOkByIdCurso((int)cmbCurso.SelectedValue, _Fecha);

            if (ListAlumno.Count == 0)
            {
                MessageBox.Show("No existen Alumnos asignados al curso seleccionado " + cmbCurso.Text + "\n Seleccione otro curso o salga y asigne alumnos al curso.");
            }
            else
            {
                if (dpFecha.CalendarForeColor == Color.Red)
                {
                }
                else
                {

                    foreach (Alumno h in ListAlumno)
                    {
                        Label MyLabel = new System.Windows.Forms.Label();
                        if ((selector % 2) == 0)
                        {
                            MyLabel.Location = new System.Drawing.Point(20, 40 + contador);
                        }
                        else
                        {
                            MyLabel.Location = new System.Drawing.Point(280, 25 + contador);
                        }
                        MyLabel.Name = h.Nombre + " " + h.Apellido;
                        MyLabel.Size = new System.Drawing.Size(100, 21);
                        MyLabel.TabIndex = 0;
                        MyLabel.Text = h.Nombre + " " + h.Apellido;
                        MyLabel.ImageKey = h.DNIAlumno.ToString();
                        Controls.Add(MyLabel);

                        // Adding the Click event.
                        MyLabel.Click += new EventHandler(MyLabel_Click);

                        ComboBox MyComboBox = new System.Windows.Forms.ComboBox();
                        if ((selector % 2) == 0)
                        {
                            MyComboBox.Location = new System.Drawing.Point(120, 40 + contador);
                        }
                        else
                        {
                            MyComboBox.Location = new System.Drawing.Point(380, 25 + contador);
                        }
                        MyComboBox.Name = h.DNIAlumno.ToString();
                        MyComboBox.Size = new System.Drawing.Size(110, 21);
                        MyComboBox.TabIndex = 0;
                        MyComboBox.Items.Add("Presente");
                        MyComboBox.Items.Add("Ausente");
                        MyComboBox.DropDownStyle = ComboBoxStyle.DropDownList;
                        Controls.Add(MyComboBox);

                        // Adding the Click event.
                        MyLabel.Click += new EventHandler(MyComboBox_Click);

                        contador += 15;
                        selector++;
                    }

                    //Creo los botones de guargar
                    Button btnGuardar = new System.Windows.Forms.Button();
                    btnGuardar.Location = new System.Drawing.Point(447, 30 + contador * 2);
                    btnGuardar.Name = "btnGuardar";
                    btnGuardar.Size = new System.Drawing.Size(75, 23);
                    btnGuardar.TabIndex = 0;
                    btnGuardar.Text = "Guardar";
                    Controls.Add(btnGuardar);
                    // Adding the Click event.
                    btnGuardar.Click += new EventHandler(btnGuardar_Click);

                }
            }

            //Creo los botones de Salir
            Button btnSalir = new System.Windows.Forms.Button();
            btnSalir.Location = new System.Drawing.Point(366, 30 + contador * 2);
            btnSalir.Name = "btnSalir";
            btnSalir.Size = new System.Drawing.Size(75, 23);
            btnSalir.Text = "Cancelar";
            btnSalir.TabIndex = 0;
            Controls.Add(btnSalir);
            // Adding the Click event.
            btnSalir.Click += new EventHandler(btnSalir_Click);

            //Le doy el tamaño al control dinamicamente
            this.Size = new System.Drawing.Size(550, contador*2 +100);
        }

        private void MyLabel_Click(object sender, System.EventArgs e)
        {

        }

        private void MyComboBox_Click(object sender, System.EventArgs e)
        {

        }

        private void btnGuardar_Click(object sender, System.EventArgs e)
        {
            //Guardo las asistencias de los alumnos el una lista
            List<AsistenciaAlumno> ListAsistenciaAlumno = new List<AsistenciaAlumno>();

            bool validartodoslosIngresos = true;

            foreach(System.Windows.Forms.Control ctr in Controls)
            {
                if (ctr is ComboBox)
                {
                    if (ctr.Name != "cmbCurso")
                    {
                        if(ctr.Text.Equals(""))
                        {
                            AlumnoManager AlumnoManager = new AlumnoManager();
                            string Nombre = AlumnoManager.getAlumnobyDNI(int.Parse(ctr.Name)).Nombre;
                            string Apellido = AlumnoManager.getAlumnobyDNI(int.Parse(ctr.Name)).Apellido;
                            
                            MessageBox.Show("Falta asignar el alumno " + Nombre + " " + Apellido);
                            validartodoslosIngresos = false;
                        }
                        else
                        {
                            AsistenciaAlumno AsistenciaAlumno = new AsistenciaAlumno();
                            if (ctr.Text == "Presente")
                            {
                                AsistenciaAlumno.Asistio = 1;
                            }
                            else
                            {
                                AsistenciaAlumno.Asistio = 0;
                            }

                            AsistenciaAlumno.DNIAlumno = int.Parse(ctr.Name);
                            AsistenciaAlumno.idCurso = (int)cmbCurso.SelectedValue;
                            AsistenciaAlumno.Fecha = _Fecha;

                            ListAsistenciaAlumno.Add(AsistenciaAlumno);
                        }
                    }
                }
            }

            if (validartodoslosIngresos == true)
            {
                //Guardo las asistencias de los alumnos en la db
                AlumnoManager alumnoManager = new AlumnoManager();
                alumnoManager.guardarAsistenciaAlumno(ListAsistenciaAlumno);
                MessageBox.Show("Asistencia guardada con exito!");
                this.Close();
            }
        }

        private void btnSalir_Click(object sender, System.EventArgs e)
        {
            this.Close();
        }

        private void CargarCursos()
        {
            List<Curso> ListCurso = new List<Curso>();
            CursoManager CursoManager = new CursoManager();

            ListCurso = CursoManager.getCursoActual();
            DataTable dtable = new DataTable();
            dtable.Columns.Add("id", typeof(int));
            dtable.Columns.Add("Nombre", typeof(string));

            foreach (Curso curso in ListCurso)
            {
                DataRow drow = dtable.NewRow();
                drow["Nombre"] = curso.NombreCurso;
                drow["id"] = curso.idCurso;
                dtable.Rows.Add(drow);
            }

            cmbCurso.DisplayMember = "Nombre";
            cmbCurso.ValueMember = "id";
            cmbCurso.DataSource = dtable;
            if (_idCurso != 0)
                cmbCurso.SelectedValue = _idCurso;
            this.cmbCurso.SelectedIndexChanged += new System.EventHandler(this.cmbCurso_SelectedIndexChanged);
        }

        private void cmbCurso_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.Hide();
            AltaAsistenciaAlumno r = new AltaAsistenciaAlumno((int)cmbCurso.SelectedValue);
            r.StartPosition = FormStartPosition.CenterScreen;
            r.ShowDialog();
            
        }
    }
}
